Большая проблема, с которой я столкнулся в качестве записи звука, заключалась в том, что я установил слишком низкую битовую скорость на 16. 16 - это значение, которое обычно соответствует битовой глубине, а не битовой скорости.Скорость передачи битов обычно указывается в кбит / с, но MediaRecorder.setAudioEncodingBitRate () принимает бит / с (обратите внимание, нет "k").Попробуйте это:
MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(...);
recorder.setAudioEncoder(...);
final int bitDepth = 16;
final int sampleRate = 44100;
final int bitRate = sampleRate * bitDepth;
recorder.setAudioEncodingBitRate(bitRate);
recorder.setAudioSamplingRate(sampleRate);
recorder.setOutputFile(...);
recorder.prepare();
recorder.start();
// stop
recorder.stop();
recorder.reset();
recorder.release();
Вам нужно будет проверить поддерживаемые форматы мультимедиа , чтобы выяснить правильные соответствия формата (аудиокодер), контейнера (выходной формат), частоты дискретизации (обычноуказывается в кГц, но передается в MediaRecorder.setSamplingRate () как просто Гц), и скорость передачи (обычно указывается в кбит / с).Обратите внимание, что не все форматы в документации имеют указанную скорость передачи данных;использование метода из приведенного выше кода должно дать правильное предположение о правильной скорости передачи в этом случае.
Благодаря @StarPinkER, @PrvN, @arlomedia в этом SO ответе за помощь мнепроясни это.